package com.hll.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

/**
 * @author: Mr.Hu
 * @create: 2021-03-11 22:31
 */
@Aspect
public class AnnotationPointcut {
  @Before("execution(* com.hll.service.UserService.*(..))")
  public void before() {
    System.out.println("---------方法执行前---------");
  }

  @After("execution(* com.hll.service.UserService.*(..))")
  public void after() {
    System.out.println("---------方法执行后---------");
  }

  @Around("execution(* com.hll.service.UserService.*(..))")
  public Object around(ProceedingJoinPoint jp) throws Throwable {
    System.out.println("环绕前");
    System.out.println("签名:" + jp.getSignature());
    // 执行目标方法proceed
    Object proceed = jp.proceed(); // before和after在这中间
    System.out.println("环绕后");
    System.out.println(proceed);
    return null;
  }
}
